package main
import "fmt"
import "math"

type Square struct{
  side float32
}
func (sq *Square) Area() float32{
  return sq.side * sq.side
}
type Circle struct{
  radius float32
}
func (ci *Circle) Area() float32{
  return ci.radius * ci.radius * math.Pi
}
type Shaper interface{
  Area() float32
}
func main(){
  var areaIntf Shaper
  sq1	:= new(Square)
  sq1.side	= 5

  areaIntf	= sq1
  if t, ok := areaIntf.(*Square); ok{
	fmt.Printf("The type of areaIntf is: %T\n", t)
  }
  if u, ok:= areaIntf.(*Circle); ok{
	fmt.Printf("The type of areaIntf is: %T\n", u)
  }else{
	fmt.Printf("areaIntf dose not contain a variable of type Circle\n")
  }
}
